#ifndef MATRICEGL3_H
#define MATRICEGL3_H

/** Fichier qui déclare une classe représentant les matrices réelles 3x3
 * inversibles.
 *
 * Ce fichier contient la définition de la classe MatriceGL3.
 *
 * @file MatriceGL3.hpp
 * @author Johan "Solo" Luisier
 *
 * @date 24 Juin 2011
 */

#include "Matrice3x3.hpp"

/** Classe qui implémente les matrices @f$ 3 \times 3 @f$ inversibles à
 * coefficients réels.
 *
 * Le groupe GL( 3, R ) contient les matrices inversibles, c'est à
 * dire les matrices dont le déterminant n'est pas nul. La classe
 * MatriceGL3 implémente de telles matrices. On ajoute simplement une
 * méthode inverse() et on vérifie à la construction que le
 * déterminant n'est pas nul.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 24 Juin 2011
 *
 * @class MatriceGL3 "MatriceGL3.hpp" "Algebre/MatriceGL3.hpp"
 */
class MatriceGL3 : public Matrice3x3
{
public:
    MatriceGL3(const double& scalaire = 1.);
    MatriceGL3(const Vecteur& x, const Vecteur& y, const Vecteur& z);
    MatriceGL3(const MatriceGL3& mat);
    MatriceGL3(const Matrice3x3& mat);
    MatriceGL3(const double& m11, const double& m22, const double& m33);
    virtual ~MatriceGL3();
    MatriceGL3& operator=(const Matrice3x3& mat);
    MatriceGL3 inverse() const;
private:
    void verifie() const;
};

#endif // MATRICEGL3_H
